class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        long long left=0;long long right=0;
        long long cnt=0;
        unordered_map<int,int> hash1;
        unordered_map<int,int> hash2;
        vector<int> ret;
        for(auto e:p)
        {

            hash1[e]++;
        }
        while(right<s.size())
        {
            //进窗口
            if(hash2[s[right]]<hash1[s[right]]) cnt++;//合法字符加一 
            hash2[s[right]]++;
            if(right-left+1>p.size())
            {
                //如果字符串长度到了
                //维护字符串长度
                if(hash2[s[left]]<=hash1[s[left]]) cnt--;
                hash2[s[left]]--;
                left++;
            }
            //更新结果
            if(p.size()==cnt) ret.push_back(left);
            right++;
        }
        return ret;
    }
};